package cn.aezo.minions.gen.java;

import cn.aezo.minions.utils.ClassLoaderU;

import java.lang.reflect.Method;
import java.util.Set;

/**
 * Created by smalle on 2017/10/18.
 */
public class RenderJava {
    /**
     * 需要导入的包名
     */
    private Set<String> importClasses;

    /**
     * 项目包名
     */
    private String projectPackageName;
    /**
     * 服务名
     */
    private String serviceName;
    /**
     * 模块名
     */
    private String moduleName;
    /**
     * 类名
     */
    private String className;

    /**
     * 类名前缀
     */
    private String classPrefix;
    /**
     * 类名后缀
     */
    private String classSuffix;

    /**
     * 成员变量/常量
     */
    private Set<String> fileds;

    /**
     * 方法名前缀
     */
    private String functionPrefix;
    /**
     * 方法名后缀
     */
    private String functionSuffix;


    public static void main(String[] args) {
        try {
            // ClassLoaderU.setCompileLogInfo(true);
            Class c = ClassLoaderU.loadClassByJavaFile(
                    "D:\\IdeaProjects\\minions\\generator\\1\\video\\src\\main\\java\\cn\\aezo\\video\\model\\User.java",
                    "D:\\IdeaProjects\\minions\\target\\classes",
                    "cn.aezo.video.model.User");

            // 实例化
            Object o = c.newInstance();

            // 反射调用
            Method m = c.getDeclaredMethod("getUsername");
            m.invoke(o, null);

            Method[] methods = c.getMethods(); // 只能获取到可访问的方法
            for (int i = 0; i < methods.length; i++) {
                Method method = methods[i];
                //获取类中的方法名字
                String methodName = methods[i].getName();
                System.out.println("MethodName : " + methodName);

                if("setId".equals(methodName)) {
                    Class<?>[] params = methods[i].getParameterTypes();
                    for (int j = 0; j < params.length; j++) {
                        //获取方法中的参数类型
                        System.out.println("ParamsType : " + params[j].toString());
                    }

                    System.out.println("method.getReturnType().toString() = " + method.getReturnType().toString()); // 1 public,
                    System.out.println("method.getModifiers() = " + method.getModifiers());

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
